home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 1995 #5 & #6
/
Amiga Plus CD - 1995 - No. 5 and 6.iso
/
pd
/
serien
/
purity
/
nr.43
/
os2unit
/
os2unit.p
< prev
next >
Wrap
Text File
|
1995-01-07
|
11KB
|
401 lines
{ ****** Auto-Revision (do NOT edit) ********************
*
* © Copyright by BOMBERSOFT
*
* Filename : Sources:OS2Unit.p
* Created on : 17-Dez-94 um 13:50:32 Uhr.
* Created by : Björn Schotte
* Current revision : V0.030
*
*
* Purpose: Unit zur Vereinfachung von OS2-Sachen, z.B. GUIs etc.
*
*
* V0.030 kreiert am 17-Dez-94 um 13:50:32 Uhr. LogMessage:
* ASLFileReq() hinzugefügt. Mächtige Funktion
* zum Auswählen von Dateien.
*
* V0.020 kreiert am 11-Dez-94 um 15:38:36 Uhr. LogMessage:
* SetXXXGad-Prozeduren erweitert;
* GhostGadget(), GadSelect hinzugefügt.
*
* V0.010 kreiert am 11-Dez-94 um 12:10:04 Uhr. LogMessage:
* SetXXXGad-Prozeduren hinzugefügt.
*
* V0.000 kreiert am 11-Dez-94 um 11:32:24 Uhr. LogMessage:
* --- Initial release ---
******************************************************* }
UNIT OS2;
INTERFACE
USES Intuition, Exec;
{$incl "gadtools.lib",
"graphics/text.h",
"asl.lib",
"dos.lib"}
CONST
FREQ_NOTALLOC = -100;
TYPE
p_ASLFileStruct = ^ASLFileStruct;
ASLFileStruct = RECORD
left, top,
width,
height : INTEGER;
titel : STRING[80];
pfad,
datei,
initp,
initd,
filename : STRING[256];
pattern : STRING[80];
display_pat: BOOLEAN;
win : p_Window;
winsleep,
canceled : BOOLEAN;
negativ,
positiv : STRING;
END;
VAR
topaz80 : TextAttr;
MyTattr : ^TextAttr;
WBRight, WBBottom,
ScreenW, ScreenH, FontX,
FontY, XOff, YOff : LONG;
FUNCTION OpenGadTools(version:INTEGER) : BOOLEAN;
FUNCTION OpenASL(version:INTEGER) : BOOLEAN;
PROCEDURE CloseGadTools;
PROCEDURE CloseASL;
FUNCTION ComputeX(value:INTEGER) : INTEGER;
FUNCTION ComputeY(value:INTEGER) : INTEGER;
PROCEDURE ComputeFont(VAR f : p_TextFont;
width,height : INTEGER);
PROCEDURE SensitivGadget(VAR ng:NewGadget);
PROCEDURE FS_BevelBox(VAR wo : p_Window;
VAR vi : PTR;
x,y,b,h : INTEGER;
recessed : BOOLEAN);
PROCEDURE GadSelect(VAR wp:p_Window; VAR gad:p_Gadget);
PROCEDURE SetCheckBox(VAR wp:p_Window; VAR gad:p_Gadget; req:p_Requester;
flag:BOOLEAN);
PROCEDURE SetMXGad(VAR wp:p_Window; VAR gad:p_Gadget; req:p_Requester;
active:LONG);
PROCEDURE SetCycleGad(VAR wp:p_Window; VAR gad:p_Gadget; req:p_Requester;
active:LONG);
PROCEDURE SetListViewGad(VAR wp:p_Window; VAR gad:p_Gadget; req:p_Requester;
active,top:LONG);
PROCEDURE SetListViewList(VAR wp:p_Window; VAR gad:p_Gadget; req:p_Requester;
VAR NeueList : p_List);
PROCEDURE SetNumberGad(VAR wp:p_Window; VAR gad:p_Gadget; req:p_Requester;
nummer:LONG);
PROCEDURE GhostGadget(VAR wp:p_Window; VAR gad:p_Gadget; req:p_Requester;
dis:BOOLEAN);
PROCEDURE ActStringGad(VAR wp:p_Window; VAR gad:p_Gadget; req:p_Requester);
PROCEDURE InitASLStruct(VAR asls : ASLFileStruct);
FUNCTION ASLFileReq(VAR ASLStruct : ASLFileStruct) : LONG;
IMPLEMENTATION
{ Versucht, die "gadtools.library" mit der angegebenen Versionsnummer
zu öffnen.
Eingabe: Mind.-Version
Ausgabe: TRUE bei Erfolg, ansonsten FALSE }
FUNCTION OpenGadTools;
BEGIN
OpenGadTools := FALSE;
GadToolsBase := OpenLibrary("gadtools.library", version);
IF GadToolsBase <> NIL THEN OpenGadTools := TRUE;
END;
FUNCTION OpenASL;
BEGIN
OpenASL := FALSE;
ASLBase := OpenLibrary("asl.library", version);
IF ASLBase <> NIL THEN OpenASL := TRUE;
END;
{ Schliesst die "gadtools.library" }
PROCEDURE CloseGadTools;
BEGIN
IF GadToolsBase <> NIL THEN CloseLibrary(GadToolsBase);
GadToolsBase := NIL;
END;
PROCEDURE CloseASL;
BEGIN
IF ASLBase <> NIL THEN CloseLibrary(ASLBase);
ASLBase := NIL;
END;
{ Eingabe: Breite bei topaz/8-Font }
{ Ausgabe: Breite bei aktuellem Font }
FUNCTION ComputeX;
BEGIN
ComputeX := ((FontX * value)+4) DIV 8;
END;
{ Eingabe: Höhe bei topaz/8-Font }
{ Ausgabe: Höhe bei aktuellem Font }
FUNCTION ComputeY;
BEGIN
ComputeY := ((FontY*value)+4) DIV 8;
END;
PROCEDURE ComputeFont;
LABEL UseTopaz;
BEGIN
Forbid;
MyTattr := ^topaz80;
MyTattr^.ta_Name := f^.tf_Message.mn_Node.ln_Name;
MyTattr^.ta_YSize := f^.tf_YSize;
FontY := f^.tf_YSize;
FontX := f^.tf_XSize;
Permit;
IF (width>0) AND (height>0) THEN
BEGIN
IF ( (ComputeX(width)+xoff+WBRight)>ScreenW) THEN GOTO UseTopaz;
IF ( (ComputeY(height)+yoff+WBBottom)>ScreenH) THEN GOTO UseTopaz;
END;
EXIT;
UseTopaz:
MyTattr^.ta_Name := "topaz.font";
FontX := 8;
FontY := 8;
MyTattr^.ta_Flags := FPF_ROMFONT;
MyTattr^.ta_YSize := 8;
END;
{ Modifiziert die Koordinaten eines Gadgets so, daß }
{ sie sich fontsensitiv anpassen. }
PROCEDURE SensitivGadget;
BEGIN
ng.ng_LeftEdge := ComputeX(ng.ng_LeftEdge)+xoff;
ng.ng_TopEdge := ComputeY(ng.ng_TopEdge)+yoff;
ng.ng_Width := ComputeX(ng.ng_Width);
ng.ng_Height := ComputeY(ng.ng_Height);
END;
{ Zeichnet eine (fontsensitive) BevelBox }
PROCEDURE FS_BevelBox;
VAR
t : ARRAY[1..3] OF TagItem;
BEGIN
t[1] := TagItem(GT_VisualInfo,LONG(vi));
t[2] := TagItem(GTBB_Recessed, LONG(recessed));
t[3].ti_Tag := TAG_DONE;
DrawBevelBoxA(wo^.RPort,
xoff+ComputeX(x),
yoff+ComputeY(y),
ComputeX(b),
ComputeY(h),
^t);
END;
{ Nützliches Feature: Bei gadtools-Gadgets kann man per
GT_Underscore einen Buchstaben im Gadget-Text unter-
streichen. Dies soll ja bekanntlich signalisieren,
daß man durch Drücken dieses unterstrichenen Buchsta-
bens das Gadget auswählen kann. Um dies "sichtbar" zu
machen, sollte das Gadget beim Drücken der Taste inver-
tiert werden, und beim Loslassen wieder im "normalen"
Zustand gebracht werden.
Eingabe: Das Fenster, wo es selektiert werden soll und
das Gadget (logisch !) }
PROCEDURE GadSelect;
VAR
next : p_Gadget;
old : LONG;
dummy : BOOLEAN;
class, code : LONG;
msg : p_IntuiMessage;
BEGIN
old := wp^.IDCMPFlags;
dummy:=ModifyIDCMP(wp,IDCMP_RAWKEY);
next := gad^.NextGadget;
gad^.NextGadget := NIL;
gad^.Flags := gad^.Flags + SELECTED;
RefreshGadgets(gad,wp,NIL);
REPEAT
msg := p_IntuiMessage(WaitPort(wp^.UserPort));
msg := GT_GetIMsg(wp^.UserPort);
class := msg^.Class;
code := msg^.Code;
GT_ReplyIMsg(msg);
UNTIL (class = IDCMP_RAWKEY) AND ( (code AND IECODE_UP_PREFIX)=IECODE_UP_PREFIX);
dummy:=ModifyIDCMP(wp,old);
gad^.Flags := gad^.Flags - SELECTED;
RefreshGadgets(gad,wp,NIL);
gad^.NextGadget := next;
END;
{ CheckBox-Gadget an- bzw. ausschalten.
Eingabe: Fenster, das Gadget und - wenn nötig - der
Requester, auf dem das Gadget "liegt" }
PROCEDURE SetCheckBox;
VAR
t : ARRAY[1..2] OF TagItem;
BEGIN
t[1] := TagItem(GTCB_Checked, ORD(flag));
t[2].ti_Tag := TAG_DONE;
GT_SetGadgetAttrsA(gad, wp, req, ^t);
END;
PROCEDURE SetMXGad;
VAR
t : ARRAY[1..2] OF TagItem;
BEGIN
t[1] := TagItem(GTMX_Active, active);
t[2].ti_Tag := TAG_DONE;
GT_SetGadgetAttrsA(gad,wp,req,^t);
END;
PROCEDURE SetCycleGad;
VAR
t : ARRAY[1..2] OF TagItem;
BEGIN
t[1] := TagItem(GTCY_Active, active);
t[2].ti_Tag := TAG_DONE;
GT_SetGadgetAttrsA(gad,wp,req,^t);
END;
PROCEDURE SetListViewGad;
VAR
t : ARRAY[1..3] OF TagItem;
BEGIN
t[1] := TagItem(GTLV_Selected, active);
t[2] := TagItem(GTLV_Top, top);
t[3].ti_Tag := TAG_DONE;
GT_SetGadgetAttrsA(gad,wp,req,^t);
END;
PROCEDURE SetListViewList;
VAR
t : ARRAY[1..2] OF TagItem;
BEGIN
t[1] := TagItem(GTLV_Labels, LONG(NeueList));
t[2].ti_Tag := TAG_DONE;
GT_SetGadgetAttrsA(gad,wp,req,^t);
END;
PROCEDURE SetNumberGad;
VAR
t : ARRAY[1..2] OF TagItem;
BEGIN
t[1] := TagItem(GTNM_Number, nummer);
t[2].ti_Tag := TAG_DONE;
GT_SetGadgetAttrsA(gad,wp,req,^t);
END;
PROCEDURE GhostGadget;
VAR
t : ARRAY[1..2] OF TagItem;
BEGIN
t[1] := TagItem(GA_Disabled, ORD(dis));
t[2].ti_Tag := TAG_DONE;
GT_SetGadgetAttrsA(gad,wp,req,^t);
END;
PROCEDURE ActStringGad;
VAR
dummy : BOOLEAN;
BEGIN
dummy := ActivateGadget(gad,wp,req);
END;
PROCEDURE InitASLStruct;
BEGIN
asls := ASLFileStruct(-1,-1,-1,-1,"","","","","","","",TRUE,NIL,FALSE,FALSE,
"","");
END;
FUNCTION ASLFileReq;
VAR
t : ARRAY[0..12] OF TagItem;
fre : p_FileRequester;
bool : BOOLEAN;
BEGIN
ASLFileReq := 0;
t[0].ti_Tag := ASLFR_InitialDrawer;
IF ASLStruct.initp <> "" THEN t[0].ti_Data := LONG(^ASLStruct.initp)
ELSE t[0].ti_Tag := TAG_IGNORE;
t[1].ti_Tag := ASLFR_InitialFile;
IF ASLStruct.initd <> "" THEN t[1].ti_Data := LONG(^ASLStruct.initd)
ELSE t[1].ti_Tag := TAG_IGNORE;
t[2] := TagItem(ASLFR_Window, LONG(ASLStruct.win));
IF ASLStruct.win <> NIL THEN t[2] := TagItem(ASLFR_SleepWindow, ORD(ASLStruct.winsleep))
ELSE t[2].ti_Tag := TAG_IGNORE;
t[3] := TagItem(ASLFR_TitleText, LONG(^ASLStruct.titel));
IF ASLStruct.pattern <> "" THEN
BEGIN
t[4] := TagItem(ASLFR_InitialPattern, LONG(^ASLStruct.pattern))
END ELSE
BEGIN
t[4].ti_Tag := TAG_IGNORE;
END;
IF ASLStruct.display_pat THEN
t[5] := TagItem(ASLFR_DoPatterns, ORD(TRUE))
ELSE
t[5].ti_Tag := TAG_IGNORE;
IF ASLStruct.left > -1 THEN t[6] := TagItem(ASLFR_InitialLeftEdge, ASLStruct.left)
ELSE t[6].ti_Tag := TAG_IGNORE;
IF ASLStruct.top > -1 THEN t[7] := TagItem(ASLFR_InitialTopEdge, ASLStruct.top)
ELSE t[7].ti_Tag := TAG_IGNORE;
IF ASLStruct.width > -1 THEN t[8] := TagItem(ASLFR_InitialWidth, ASLStruct.width)
ELSE t[8].ti_Tag := TAG_IGNORE;
IF ASLStruct.height > -1 THEN t[9] := TagItem(ASLFR_InitialHeight, ASLStruct.height)
ELSE t[9].ti_Tag := TAG_IGNORE;
IF ASLStruct.negativ <> "" THEN
t[10] := TagItem(ASLFR_NegativeText, LONG(^ASLStruct.negativ))
ELSE
t[10].ti_Tag := TAG_IGNORE;
IF ASLStruct.positiv <> "" THEN
t[11] := TagItem(ASLFR_PositiveText, LONG(^ASLStruct.positiv))
ELSE
t[11].ti_Tag := TAG_IGNORE;
t[12].ti_Tag := TAG_DONE;
fre := AllocASLRequest(ASL_FileRequest, ^t);
IF fre <> NIL THEN
BEGIN
IF ASLRequest(fre, ^t) THEN
BEGIN
ASLStruct.pfad := fre^.rf_Dir;
ASLStruct.datei := fre^.rf_File;
ASLStruct.canceled := FALSE;
ASLStruct.filename := ASLStruct.pfad;
bool := AddPart(ASLStruct.filename,ASLStruct.datei,256);
ASLStruct.pattern := fre^.rf_Pat;
ASLStruct.initp := ASLStruct.pfad;
ASLStruct.initd := ASLStruct.datei;
END ELSE
BEGIN
IF IOErr = 0 THEN ASLStruct.canceled := TRUE
ELSE
BEGIN
ASLStruct.canceled := FALSE;
ASLFileReq := IOErr;
END;
END;
FreeASLRequest(fre);
END ELSE ASLFileReq := FREQ_NOTALLOC;
END;
BEGIN
topaz80 := TextAttr("topaz.font", 8, 0, 0);
END.